package com.fanghaoran.notes.dao;

import com.fanghaoran.notes.bean.OrderDetail;
import com.fanghaoran.notes.bean.RefundDetail;
import com.fanghaoran.notes.bean.SellDetail;
import com.fanghaoran.notes.entity.Item;
import com.fanghaoran.notes.entity.Orders;
import com.fanghaoran.notes.entity.Refund;

import java.sql.SQLException;
import java.util.List;

/**
 * @Author: win11
 * @Date: 2023/04/23/9:55
 * @Description: 订单dao层
 */
public interface OrderDao {
    /**
     * 插入订单数据
     * @param order 订单数据
     * @return 返回插入结果
     * @throws SQLException 异常
     */
    Integer insertOrder(Orders order) throws SQLException;

    /**
     * 插入订单项
     * @param item 订单项数据
     * @return 返回插入结果
     * @throws SQLException 异常
     */
    Integer insertItem(Item item) throws SQLException;

    /**
     * 查询某个用户的所有订单(通过用户id)
     * @param uId 用户id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<Orders> selectOrderByUid(Integer uId) throws Exception;

    /**
     * 查询订单详情 通过订单编号
     * @param oId 订单编号
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<OrderDetail> selectOrderDetail(String oId) throws Exception;

    /**
     * 更新订单状态
     * @param oId 订单编号
     * @param oState 订单状态
     * @return 返回更新结果
     * @throws SQLException 异常
     */
    Integer updateState(String oId,int oState) throws SQLException;

    /**
     * 查询某个商家的商品售卖情况
     * @param uId 商家id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<SellDetail> selectSellByUid(Integer uId) throws Exception;

    /**
     * 查询退款信息 通过订单项id
     * @param iid 订单项id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<Refund> selectRefundByIid(int iid) throws Exception;

    /**
     * 插入退款信息
     * @param iid 订单项id
     * @param reason 退款原因
     * @param state 退款状态
     * @param uId 退款人id
     * @return 返回插入结果
     * @throws SQLException 异常
     */
    Integer insertRefund(int iid, String reason, int state, int uId) throws SQLException;

    /**
     * 查询某个商家的用户退款信息
     * @param uId 商家id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<RefundDetail> selectRefundByUid(int uId) throws Exception;

    /**
     * 更新退款状态
     * @param iid 订单项id
     * @param state 状态
     * @return 返回更新结果
     * @throws SQLException 异常
     */
    Integer updateRefundState(int iid, int state) throws SQLException;
}
